package testes;

import java.sql.SQLException;

import junit.framework.Assert;
import junit.framework.TestCase;
import model.Projeto;
import model.UsuarioCT;
import control.Facade;
import dao.UsuarioCTDAO;

public class ProjetoTest extends TestCase {
	
	private Facade facade;
	private UsuarioCT u1, u2, u3, u4, u5;
	private Projeto p1, p2, p3, p4, p5;
	
	public ProjetoTest(String name) {
		super(name);
	}
	
	public void setUp() throws SQLException {
		
		facade = Facade.getInstance();
		
		u1 = new UsuarioCT("u1", "u1123", "Andre Hora");
		u2 = new UsuarioCT("u2", "u2123", "Andreia Hora");
		u3 = new UsuarioCT("u3", "u3123", "Diego Gurjao");
		u4 = new UsuarioCT("u4", "u4123", "Vinicius Porto");
		u5 = new UsuarioCT("u5", "u5123", "Carla Moura");
		
		facade.cadastrarUsuario(u1);
		facade.cadastrarUsuario(u2);
		facade.cadastrarUsuario(u3);
		facade.cadastrarUsuario(u4);
		facade.cadastrarUsuario(u5);
		
		p1 = new Projeto("p1", "p1", "descricao1", "Python License",
				"descricao1", "svn", "analise");
		p2 = new Projeto("p2", "p2", "descricao2", "Python License",
				"descricao2", "svn", "analise");
		p3 = new Projeto("p3", "p3", "descricao3", "Python License",
				"descricao3", "svn", "analise");
		p4 = new Projeto("p4", "p4", "descricao4", "Python License",
				"descricao4", "svn", "analise");
		p5 = new Projeto("p5", "p5", "descricao15", "Python License",
				"descricao5", "svn", "analise");
		
		facade.cadastraProjeto(u1, p1);
		facade.cadastraProjeto(u2, p2);
		facade.cadastraProjeto(u3, p3);
		facade.cadastraProjeto(u4, p4);
		facade.cadastraProjeto(u5, p5);
	}
	
	public void tearDown() throws SQLException {
		
		facade.removeProjeto("p1");
		facade.removeProjeto("p2");
		facade.removeProjeto("p3");
		facade.removeProjeto("p4");
		facade.removeProjeto("p5");
		
		facade.removerUsuario(u1);
		facade.removerUsuario(u2);
		facade.removerUsuario(u3);
		facade.removerUsuario(u4);
		facade.removerUsuario(u5);
		
	}
	
	public void testPesquisarProjeto() throws SQLException {
		
		Projeto projeto;
		
		projeto = facade.pesquisaProjeto("p1");
		assertEquals("p1", projeto.getNomeUnix());

		projeto = facade.pesquisaProjeto("p2");
		assertEquals("p2", projeto.getNomeUnix());
		
		projeto = facade.pesquisaProjeto("p3");
		assertEquals("p3", projeto.getNomeUnix());
		
		projeto = facade.pesquisaProjeto("p4");
		assertEquals("p4", projeto.getNomeUnix());
		
		projeto = facade.pesquisaProjeto("p5");
		assertEquals("p5", projeto.getNomeUnix());
	}
	
	public void testAlterarProjeto() throws SQLException {
		
		Projeto projeto;
		String novoNomeCompleto = "p1 novo";
		String novaDescicao = "descricao1 nova";

		p1.setNomeCompleto(novoNomeCompleto);
		p1.setDescricao(novaDescicao);
		facade.alteraProjeto(p1);
		projeto = facade.pesquisaProjeto("p1");
		assertEquals("p1 novo", projeto.getNomeCompleto());
		assertEquals("descricao1 nova", projeto.getDescricao());
		
		novoNomeCompleto = "p2 novo";
		novaDescicao = "descricao2 nova";
		
		p2.setNomeCompleto(novoNomeCompleto);
		p2.setDescricao(novaDescicao);
		facade.alteraProjeto(p2);
		projeto = facade.pesquisaProjeto("p2");
		assertEquals("p2 novo", projeto.getNomeCompleto());
		assertEquals("descricao2 nova", projeto.getDescricao());
		
		novoNomeCompleto = "p3 novo";
		novaDescicao = "descricao3 nova";
		
		p3.setNomeCompleto(novoNomeCompleto);
		p3.setDescricao(novaDescicao);
		facade.alteraProjeto(p3);
		projeto = facade.pesquisaProjeto("p3");
		assertEquals("p3 novo", projeto.getNomeCompleto());
		assertEquals("descricao3 nova", projeto.getDescricao());
		
		novoNomeCompleto = "p4 novo";
		novaDescicao = "descricao4 nova";
		
		p4.setNomeCompleto(novoNomeCompleto);
		p4.setDescricao(novaDescicao);
		facade.alteraProjeto(p4);
		projeto = facade.pesquisaProjeto("p4");
		assertEquals("p4 novo", projeto.getNomeCompleto());
		assertEquals("descricao4 nova", projeto.getDescricao());
		
		novoNomeCompleto = "p5 novo";
		novaDescicao = "descricao5 nova";
		
		p5.setNomeCompleto(novoNomeCompleto);
		p5.setDescricao(novaDescicao);
		facade.alteraProjeto(p5);
		projeto = facade.pesquisaProjeto("p5");
		assertEquals("p5 novo", projeto.getNomeCompleto());
		assertEquals("descricao5 nova", projeto.getDescricao());
	}
	
	public void testEhAdministrador() throws SQLException {
		
		assertTrue(facade.ehAdministrador("u1", "p1"));
		assertTrue(facade.ehAdministrador("u2", "p2"));
		assertTrue(facade.ehAdministrador("u3", "p3"));
		assertTrue(facade.ehAdministrador("u4", "p4"));
		assertTrue(facade.ehAdministrador("u5", "p5"));
	}
}
